home *** CD-ROM | disk | FTP | other *** search
- import rpm
- #import gettext
- from snack import *
- from textw.constants import *
- from translate import _
-
- class PackageGroupWindow:
- def __call__(self, screen, todo, individual):
- # be sure that the headers and comps files have been read.
- todo.getHeaderList()
- todo.getCompsList()
-
- ct = CheckboxTree(height = 10, scroll = 1)
- for comp in todo.comps:
- if not comp.hidden:
- ct.append(comp.name, comp, comp.selected)
-
- cb = Checkbox (_("Select individual packages"), individual.get ())
-
- bb = ButtonBar (screen, ((_("OK"), "ok"), (_("Back"), "back")))
-
- g = GridForm (screen, _("Package Group Selection"), 1, 3)
- g.add (ct, 0, 0, (0, 0, 0, 1))
- g.add (cb, 0, 1, (0, 0, 0, 1))
- g.add (bb, 0, 2, growx = 1)
-
- result = g.runOnce()
-
- individual.set (cb.selected())
- # turn off all the comps
- for comp in todo.comps:
- if not comp.hidden: comp.unselect(0)
-
- # turn on all the comps we selected
- for comp in ct.getSelection():
- comp.select (1)
-
- rc = bb.buttonPressed (result)
-
- if rc == "back":
- return INSTALL_BACK
- return INSTALL_OK
-
- class IndividualPackageWindow:
- def __call__(self, screen, todo, individual):
- if not individual.get():
- return
- todo.getHeaderList()
- todo.getCompsList()
-
- ct = CheckboxTree(height = 10, scroll = 1)
- groups = {}
-
- # go through all the headers and grok out the group names, placing
- # packages in lists in the groups dictionary.
-
- for key in todo.hdList.packages.keys():
- header = todo.hdList.packages[key]
- # don't show this package if it is in the base group
- if not todo.comps["Base"].items.has_key (header):
- if not groups.has_key (header[rpm.RPMTAG_GROUP]):
- groups[header[rpm.RPMTAG_GROUP]] = []
- groups[header[rpm.RPMTAG_GROUP]].append (header)
-
- # now insert the groups into the list, then each group's packages
- # after sorting the list
- def cmpHdrName(first, second):
- if first[rpm.RPMTAG_NAME] < second[rpm.RPMTAG_NAME]:
- return -1
- elif first[rpm.RPMTAG_NAME] == second[rpm.RPMTAG_NAME]:
- return 0
- return 1
-
- keys = groups.keys ()
- keys.sort ()
- index = 0
- for key in keys:
- groups[key].sort (cmpHdrName)
- ct.append (key)
- for header in groups[key]:
- ct.addItem (header[rpm.RPMTAG_NAME], (index, snackArgs["append"]),
- header, header.selected)
- index = index + 1
-
- bb = ButtonBar (screen, ((_("OK"), "ok"), (_("Back"), "back")))
-
- g = GridForm (screen, _("Package Group Selection"), 1, 2)
- g.add (ct, 0, 0, (0, 0, 0, 1))
- g.add (bb, 0, 1, growx = 1)
- g.addHotKey("F1")
-
- result = g.run()
- while result == "F1":
- h = ct.getCurrent()
- if type(h) != type(""):
- ButtonChoiceWindow(screen, h['name'], h['description'],
- buttons = [ _('Ok') ], x = 5, y = 5)
- result = g.run()
- screen.popWindow()
-
- # turn off all the packages
- for key in todo.hdList.packages.keys ():
- todo.hdList.packages[key].selected = 0
-
- # turn on all the packages we selected
- for package in ct.getSelection ():
- package.selected = 1
-
- rc = bb.buttonPressed (result)
-
- if rc == "back":
- return INSTALL_BACK
-
- return INSTALL_OK
-
- class PackageDepWindow:
- def __call__(self, screen, todo):
- deps = todo.verifyDeps ()
- if not deps:
- return INSTALL_NOOP
-
- g = GridForm(screen, _("Package Dependencies"), 1, 5)
- g.add (TextboxReflowed (45, _("Some of the packages you have "
- "selected to install require "
- "packages you have not selected. If "
- "you just select Ok all of those "
- "required packages will be "
- "installed.")), 0, 0, (0, 0, 0, 1))
- g.add (Label ("%-20s %-20s" % (_("Package"), _("Requirement"))), 0, 1, anchorLeft = 1)
- text = ""
- for name, suggest in deps:
- text = text + "%-20s %-20s\n" % (name, suggest)
-
- if len (deps) > 5:
- scroll = 1
- else:
- scroll = 0
-
- g.add (Textbox (45, 5, text, scroll = scroll), 0, 2, anchorLeft = 1)
-
- cb = Checkbox (_("Install packages to satisfy dependencies"), 1)
- g.add (cb, 0, 3, (0, 1, 0, 1), growx = 1)
-
- bb = ButtonBar (screen, ((_("OK"), "ok"), (_("Back"), "back")))
- g.add (bb, 0, 4, growx = 1)
-
- result = g.runOnce ()
-
- if cb.selected ():
- todo.selectDeps (deps)
-
- rc = bb.buttonPressed (result)
- if rc == string.lower (_("Back")):
- return INSTALL_BACK
- return INSTALL_OK
-
-